package com.example.collection;

import com.example.entity.Person;
import org.junit.Test;

import java.util.Iterator;
import java.util.TreeSet;

/**
 * @author readpage
 * @create 2022-09-24 16:45
 */
public class TreeSetTest {

    /**
     * 1. 向TreeSet中添加的数据, 要求是相同类的对象
     * 2. 两种排序方式: 自然排序 和 定制排序
     * 3. 自然排序中，比较两个对象是否相同的标准为: compareTo()返回0.不再是equals().
     * 4. 定制排序中，比较两个对象是否相同的标准为: compareTo()返回0.不再是equals().
     */

    @Test
    public void test() {
        //失败: 不能添加不同类的对象
//        TreeSet set = new TreeSet<>();
//        set.add(123);
//        set.add(456);
//        set.add("AA");
//        set.add(new Person("Tom", 12));

        TreeSet<Object> set = new TreeSet<>();
        set.add(new Person("Tom", 12));
        set.add(new Person("Jerry", 32));
        set.add(new Person("Jim", 2));
        set.add(new Person("Mike", 65));
        set.add(new Person("Jack", 33));
        set.add(new Person("Jack", 56));

        Iterator<Object> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

    @Test
    public void test2() {
        //按照年龄从大到小排列
        TreeSet<Object> set = new TreeSet<>((o1, o2) -> {
            if (o1 instanceof Person && o2 instanceof Person) {
                Person p1 = (Person) o1;
                Person p2 = (Person) o2;
                return -Integer.compare(p1.getAge(), p2.getAge());
            } else {
                throw new RuntimeException("输入的数据类型不匹配");
            }
        });
        set.add(new Person("Tom", 12));
        set.add(new Person("Jerry", 32));
        set.add(new Person("Jim", 2));
        set.add(new Person("Mike", 65));
        set.add(new Person("Jack", 33));
        set.add(new Person("Jack", 56));

        Iterator<Object> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}
